#include "comm.hpp"
#include "log.hpp"

int main()
{
    //测试代码
    // logmessage(Info, "%s", "I am a goodboy");
    // logmessage(Info, "%s", "它不懂你的爱");
    // logmessage(Warning, "%s", "He is a gay");
    // logmessage(Error, "%s", "He is no love");
    // logmessage(Debug, "%s", "想体谅你却更难过");
    // logmessage(Debug, "%s", "若是月亮还没来");
    // logmessage(Debug, "%s", "你的泪滴像倾盆大雨，碎落满地");
    // logmessage(Fatal, "%s", "可是我却不能够在你的身旁");
    // logmessage(Fatal, "%s", "你想要的，我却不能够给你我全部");
    // 创建命名管道

    Log log;
    log.enable(onefile);
    Init init;
    // int n = mkfifo("mkfifo", 0666);
    // if (n == -1)
    // {
    //     perror("makfifo");
    //     exit(MKFIFO_CREATE_ERR);
    // }

    // 打开命名管道
    int fd = open("mkfifo", O_RDONLY, 0666);
    if(fd == -1)
    {
        log(Fatal, "error string: %s, error code: %d", strerror(errno), errno);
        exit(MKFIFO_OPEN_ERR);
    }
    std::cout << "server open mkfifo done" << std::endl;

    log(Info, "server open file done, error string: %s, error code: %d", strerror(errno), errno);
    log(Warning, "server open file done, error string: %s, error code: %d", strerror(errno), errno);
    log(Fatal, "server open file done, error string: %s, error code: %d", strerror(errno), errno);
    log(Debug, "server open file done, error string: %s, error code: %d", strerror(errno), errno);

    //读取命名管道
    while(true)
    {
        char buffer[1024] = {0};
        int s = read(fd, buffer, sizeof(buffer));
        if(s > 0)
        {
            buffer[s] = 0;
            std::cout << "client say#" << buffer << std::endl;
        }
        else if(s == 0)
        {
            // std::cout << "client exit, me too!" << std::endl;
            log(Debug, "client quit, me too!, error string: %s, error code: %d", strerror(errno), errno);
            break;
        }
        else  break;
    }

    //清理退出
    // int m = unlink("mkfifo");
    // if(m == -1)
    // {
    //     log(Fatal, "error string: %s, error code: %d", strerror(errno), errno);
    //     exit(MKFIFO_UNLINK_ERR);
    // }
    close(fd);
    return 0;
}